package com.pro01.backend.mapper;

import com.pro01.backend.pojo.UserInvite;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface UserInviteMapper {

    // 生成邀请码，user_id 可以为空
    @Insert("INSERT INTO user_invites (user_id, invite_code, status, created_at) " +
            "VALUES (#{userId}, #{inviteCode}, 'UNUSED', NOW())")
    @Options(useGeneratedKeys = true, keyProperty = "id")
    int createInvite(UserInvite invite);

    // 通过邀请码查询是否有效
    @Select("SELECT * FROM user_invites WHERE invite_code = #{inviteCode} AND status = 'UNUSED'")
    UserInvite getValidInvite(String inviteCode);

    // 标记邀请码为已使用
    @Update("UPDATE user_invites SET status = 'USED' WHERE invite_code = #{inviteCode}")
    int markInviteAsUsed(String inviteCode);

    // 获取某个用户生成的邀请码列表（如果 `userId` 为空，则不返回任何邀请码）
    @Select("SELECT * FROM user_invites WHERE user_id = #{userId}")
    List<UserInvite> getInvitesByUserId(Long userId);

    // 获取所有邀请码（包括无用户的）
    @Select("SELECT * FROM user_invites")
    List<UserInvite> getAllInvites();

    // 分页显示用户已兑换的邀请码
    @Select("""
    SELECT * FROM user_invites
    WHERE user_id = #{userId}
    ORDER BY created_at DESC
    LIMIT #{offset}, #{pageSize}
""")
    List<UserInvite> getPagedInvites(@Param("userId") Long userId,
                                     @Param("offset") int offset,
                                     @Param("pageSize") int pageSize);

    @Select("SELECT COUNT(*) FROM user_invites WHERE user_id = #{userId}")
    int countInvitesByUser(@Param("userId") Long userId);

    // 显示用户生成的未使用的邀请码
    @Select("SELECT * FROM user_invites WHERE user_id = #{userId} AND status = 'UNUSED'")
    List<UserInvite> getUnusedInvitesByUserId(Long userId);


}
